fn main() {
    // 不可变
    let x = 10;
    println!("x: {x}");
    // 可变
    let mut x = 20;
    println!("x: {x}");
    x = 30;
    println!("x: {x}");

    // 自动推导, 默认i32
    let x = 50;
    println!("x: {x}");
    // 指定类型
    let x: i64 = 60;
    println!("x: {x}");

    // 作用域
    let x = 70;
    {
        let x = 80;
        println!("x: {x}");
    }
    println!("x: {x}");

    // 声明
    let s: &str;
    // // 未被初始化的变量，是不能编译通过的，以防止野指针的出现
    // println!("s: {}", s);
    // 初始化
    s = "rust";
    println!("s: {}", s);

    // mut关键字，给变量赋予了在此赋值的权限
    let mut a = "1".to_owned();
    let b = a;
    // 在此a丢失了数据，已然变成未初始化状态，使用a会编译不通过
    a = "2".to_owned();
    println!("a = {}, b = {}", a, b);
}
